package com.tcm.order.dao.mapper;


import com.tcm.order.entity.Order;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface OrderMapper {

    /**
     * 删除订单
     * @param id
     * @return
     */
    int deleteByKey(@Param("id")Long id);

    /**
     * 删除订单(逻辑删除)
     * @param id
     * @return
     */
    int deleteLogicByKey(@Param("id")Long id);

    /**
     * 保存订单数据
     * @param record
     * @return
     */
    int insert(Order record);

    /**
     * 订单号获取订单信息
     * @param orderId
     * @return
     */
    Order findByOrderId(Long orderId);

    /**
     * 订单号获取物流信息
     * @param orderId
     * @return
     */
    String findDeliveryInfoByOrderId(Long orderId);

    /**
     * 订单编号获取订单信息
     * @param orderSn
     * @return
     */
    Order findByOrderSn(String orderSn);

    /**
     * 医生端订单列表
     * @param
     * @return
     */
    List<Order> listPageOrderByDoctor(@Param("doctorId") Long doctorId, @Param("offset") Long offset,
                                      @Param("pagesize") Long pagesize);

    /**
     * 订单总数
     * @param doctorId
     * @return
     */
    Long countOrderByDoctor(@Param("doctorId") Long doctorId);

    /**
     * 患者端订单列表
     * @param userId
     * @param status
     * @param offset
     * @param pagesize
     * @return
     */
    List<Order> listPageOrderByUser(@Param("userId") Long userId, @Param("status") Byte status,
                                    @Param("offset") Long offset, @Param("pagesize") Long pagesize);

    /**
     * 订单总数
     * @param userId
     * @return
     */
    Long countOrderByUser(@Param("userId") Long userId, @Param("status") Byte status);


    /**
     * 药房管理后台端订单列表
     * @param storeId
     * @param status
     * @param offset
     * @param pagesize
     * @return
     */
    List<Order> listPageOrderByStore(@Param("storeId") Long storeId, @Param("status") Byte status,
                                                @Param("offset") Long offset, @Param("pagesize") Long pagesize);

    /**
     * 订单总数
     * @param storeId
     * @return
     */
    Long countOrderByStore(@Param("storeId") Long storeId, @Param("status") Byte status);

    /**
     * 管理后台端订单列表
     * @param status
     * @param offset
     * @param pagesize
     * @return
     */
    List<Order> listPageOrderByStatus(@Param("status") Byte status,
                                     @Param("offset") Long offset, @Param("pagesize") Long pagesize);

    /**
     * 订单总数
     * @param status
     * @return
     */
    Long countOrderByStatus(@Param("status") Byte status);


    /**
     * 更新订单
     * @param record
     * @return
     */
    int update(Order record);

//    /**
//     * 结算单药房查询
//     * @param startTime
//     * @param endTime
//     * @return
//     */
//    List<Order> selectSettleStore(@Param("startTime") String startTime,@Param("endTime") String endTime);
//
//    /**
//     * 查询结算金额
//     * @param startTime
//     * @param endTime
//     * @param storeId
//     * @return
//     */
//    Order selectSettleMoney(@Param("startTime") String startTime,@Param("endTime") String endTime,
//                            @Param("storeId") Long storeId);
//
//    /**
//     * 结算订单查询
//     * @param startTime
//     * @param endTime
//     * @return
//     */
//    void updateSettleOrder(@Param("startTime") String startTime, @Param("endTime") String endTime,
//                           @Param("storeId") Long storeId,@Param("now") LocalDateTime now);

    /**
     * 查询已支付订单
     * @param userId
     * @return
     */
    Order findPaidOrder(Long userId);

    /**
     * 查询方案对应的订单是否唯一
     * @param planId
     * @return
     */
    Order findByPlanId(Long planId);
}